package com.nageoffer.shortlink.admin.common.serialize;

import cn.hutool.core.util.DesensitizedUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * 手机号脱敏反序列化
 * 该类实现了对手机号的脱敏处理，使用了自定义的JSON序列化器，将手机号在序列化时进行脱敏操作。
 * 例如，将手机号中的中间四位数字替换为星号（*）。
 */
public class PhoneDesensitizationSerializer extends JsonSerializer<String> {

    /**
     * 自定义的序列化方法
     * 在将手机号转化为JSON格式时，调用该方法进行脱敏处理。
     *
     * @param phone 被序列化的手机号
     * @param jsonGenerator JSON生成器，用于将序列化后的数据写入
     * @param serializerProvider 序列化器提供者，提供额外的配置和功能
     * @throws IOException 如果发生输入输出异常时抛出
     */
    @Override
    public void serialize(String phone, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        // 调用自定义的脱敏工具类，对手机号进行脱敏处理
        String phoneDesensitization = DesensitizedUtil.mobilePhone(phone);

        // 将脱敏后的手机号写入JSON输出流
        jsonGenerator.writeString(phoneDesensitization);
    }
}
